//
//  NSArray+ZXAvoidCrash.h
//  MerchantBusinessClient
//
//  Created by simon on 2020/8/31.
//  Copyright © 2020 com.Chs. All rights reserved.
//
//  拦截处理会崩溃的方法；处理之后为三种返回结果：1.返回nil 2.返回NSNotFound 3.返回self

#import <Foundation/Foundation.h>
#import "ZXAvoidCrashProtocol.h"

NS_ASSUME_NONNULL_BEGIN

@interface NSArray  (ZXAvoidCrash)<ZXAvoidCrashProtocol>


@end

NS_ASSUME_NONNULL_END


/**
*  会crash的初始化：初始化对象为空，返回nil；
*
1. 字面值创建：someObject= nil;NSArray *array = @[someObject];//这种创建方式底层就是调用实例初始化方法；
2.- (instancetype)initWithObjects:(const ObjectType _Nonnull [_Nullable])objects count:(NSUInteger)cnt; //实例初始化方法，返回nil
3.+ (instancetype)arrayWithObjects:(const ObjectType _Nonnull [_Nonnull])objects count:(NSUInteger)cnt;调用实例初始化方法。
4. + (instancetype)arrayWithObject:(ObjectType)anObject;调用实例初始化方法。
 
* 会crash的method：索引越界，返回nil；
*
1.- (ObjectType)objectAtIndex:(NSUInteger)index;//返回nil;包含（1）：空数组，一个元素的数组 ，下标索引的方式访问 id value = array[3];
2.- (ObjectType)objectAtIndexedSubscript:(NSUInteger)idx;包含（1）：多元素数组下标索引的方式访问 id value = array[3];
3.- (NSArray<ObjectType> *)objectsAtIndexes:(NSIndexSet *)indexes;//返回nil
4.-(NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;//返回NSNotFound
5. - (NSUInteger)indexOfObjectIdenticalTo:(ObjectType)anObject inRange:(NSRange)range;
6.-(NSArray *)subarrayWithRange:(NSRange)range;//返回nil

 * 会crash的构造method：
1.- (NSArray<ObjectType> *)arrayByAddingObject:(ObjectType)anObject;//返回self
*/

//不会崩溃的方法
/*
1. + (instancetype)array;
2. + (instancetype)arrayWithObjects:(ObjectType)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
3. - (instancetype)initWithObjects:(ObjectType)firstObj, ...
4. + (instancetype)arrayWithArray:(NSArray<ObjectType> *)array
5. - (instancetype)initWithArray:(NSArray<ObjectType> *)array;
 
6. - (NSArray<ObjectType> *)arrayByAddingObjectsFromArray:(NSArray<ObjectType> *)otherArray;
7. - (NSString *)componentsJoinedByString:(NSString *)separator;
8. - (NSUInteger)indexOfObject:(ObjectType)anObject;
9. - (NSUInteger)indexOfObjectIdenticalTo:(ObjectType)anObject;
 */

///优点：补充了
///1.- (instancetype)initWithObjects:(const ObjectType _Nonnull [_Nullable])objects count:(NSUInteger)cnt;调用2方法。
///2. + (instancetype)arrayWithObject:(ObjectType)anObject;调用2方法。
///
///3.-(NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;//返回NSNotFound
///4. - (NSUInteger)indexOfObjectIdenticalTo:(ObjectType)anObject inRange:(NSRange)range;
///5.-(NSArray *)subarrayWithRange:(NSRange)range;//返回nil
///6.- (NSArray<ObjectType> *)arrayByAddingObject:(ObjectType)anObject;
